// ！！示例：使用 Promise 处理多个异步任务
// 模拟异步操作
function delay(time, result) {
    //resolve 是 Promise 构造函数中传入的 resolve 方法，用于将 Promise 的状态从“等待”变为“已完成”（fulfilled），并传递结果。
    // time 是延迟的时间，单位是毫秒（ms），由调用 delay(time, result) 时传入。
    // result 是当定时器结束时要传递给 resolve() 的值，即这个 Promise 完成时的结果。
    return new Promise((resolve) => setTimeout(resolve, time, result));
}
function delay2(time, result) {  //模拟报出错误的函数
    //resolve 是 Promise 构造函数中传入的 resolve 方法，用于将 Promise 的状态从“等待”变为“已完成”（fulfilled），并传递结果。
    // time 是延迟的时间，单位是毫秒（ms），由调用 delay(time, result) 时传入。
    // result 是当定时器结束时要传递给 resolve() 的值，即这个 Promise 完成时的结果。
    return new Promise((reject) => setTimeout(reject, time, new Error( result)));
}

// 创建几个用于测试的 Promise
const promise1 = delay(1000, '结果一'); // 1秒后完成
const promise2 = delay2(500, '结果二');  // 0.5秒后完成
const promise3 = delay(1500, '结果三'); // 1.5秒后完成
const promise4 = delay(2000, '结果四'); // 2秒后完成
const rejectedPromise = Promise.reject('出错了！'); // 立即失败的 Promise

// --------------------------
// 使用 Promise.all 示例：会等到所有任务完成，再返回结果
// --------------------------
Promise.all([promise1, promise2, promise3])
    .then((results) => {
        console.log('Promise.all 结果:', results); // ["结果一", "结果二", "结果三"]
    })
    .catch((error) => {
        console.error('Promise.all 错误:', error);
    });

// --------------------------
// 使用 Promise.race 示例：返回最先完成（无论成功或失败）的 Promise 的结果。这里其他的都要等待就只要这个错误的不需要等待
// --------------------------
Promise.race([promise1, promise2, promise3, rejectedPromise])
    .then((result) => {
        console.log('Promise.race 结果:', result);
    })
    .catch((error) => {
        console.error('Promise.race 错误:', error); // 出错了！（因为 rejectedPromise 最快被解决）
    });

// --------------------------
// 使用 Promise.resolve 示例：创建一个立即进入 fulfilled 状态的 Promise，并将 '这是已解决的值' 作为结果。
// --------------------------
const resolved = Promise.resolve('这是已解决的值');
resolved.then((value) => console.log('Promise.resolve 结果:', value));

// --------------------------
// 使用 Promise.reject 示例
// --------------------------
const rejected = Promise.reject('这是已拒绝的原因');
rejected.catch((reason) => console.error('Promise.reject 错误:', reason));
